/**
 * 演示 GET 接口请求的缓存问题
 *
 * 1. etag设置固定值， 则 max-age 无论多少， 都会返回缓存之前的数据
 * 2. 禁用 etag, 则 max-age 无论设置多少，是否过期了， 都忽略掉，每次都返回最新内容
 * 3. 正常设置接口的过期时间， 由于内容变化， etag 会重新计算，所以，会返回最新值
 */

const express = require('express');

const app = express();

let text = '2024-12-24';

app.get('/api/getData', async (req, res) => {
  // 设置http缓存头，10分钟不过期
  res.set('Cache-Control', 'public, max-age=' + 60);

  // 将 ETag设置死， 则浏览器一直拿到的就是 上面的 text的值；max-age失效。
  // res.set('ETag', '1111');

  // 禁用etag； 禁用， 如果内容发生变化，仍旧会返回最新的值， http状态吗一直是200. 实际效果就是忽略 max-age
  // 因为没有 etag 所以浏览器下一次请求，也不会有  if-none-match 等请求头。
  app.disable('etag');

  res.send({
    data: text,
  });
});

app.listen(3000, () => {
  console.log('监听在 3000 端口');
});

setTimeout(() => {
  text = '我更新了';
}, 3000);

// 下面仅辅助上面是否时间到了

let count = 60;
let timer = setInterval(() => {
  count--;

  if (count <= 0) {
    clearInterval(timer);
    console.log('结束了');
  }
  console.log('倒计时', count);
}, 1000);
